// pages/login/login.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    showLogin:false,
    showloginTip:false,
    //阻止函数二次触发
    ani_start_tip_not2:false,
    ani_login_tip_not2:false,
    ani_choose_status_not2:false,
    start_choose_status:false,  //开始选择身份，
    canIUseGetUserProfile:false,
    ani_not2:false,
    isLogin:false,
    status:null,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var that = this;
    var openid = null;
    // 调用云函数
    wx.cloud.callFunction({
      name: 'quickstartFunctions',
      data: {
        type: 'getOpenId'
      },
      success: res =>{
        console.log("获得openid：",res.result.openid)
        openid = res.result.openid;
        getApp().globalData.openid = openid//全局数据
        const db = wx.cloud.database()
        db.collection('userInfo').where({
          _openid: openid // 填入当前用户 openid
        }).get().then(res => {
          console.log('检查用户是否已经在数据库中',res.data)
          if(res.data.length >= 1){//数据库中至少有一条记录
            that.isRejust = false //全局变量，已经登录
            wx.setStorageSync('userInfo', res.data[0]);
            
            //如果是教师就跳转
            /*
            if(res.data[0].status == 'teacher'){
              wx.switchTab({
                url: '/pages/needStudent/needStudent',
              })
            }*/
          }else{//数据库中查找不到记录：说明尚未登陆
            getApp().globalData.isNotLogin = true;
            
          }

        })

      },
      
      })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () { 

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * login界面
   */
  showLogin(){
    if(getApp().globalData.isNotLogin){
      //第一次登录
    var duration = 250
    this.setData({
      showLogin:true
    })
    this.animate(
      '.mask',  //选择器（可以指定多个）
      [         //关键帧 （需要指定原始帧形态）
        {opacity:'0'},          //原始帧
        {opacity:'1'},
      ],
      duration, //持续时间
      function(){//执行完后回调函数
      }
    )
    }
    
    //已登录过
    else{
      let userInfo = wx.getStorageSync('userInfo');
      wx.reLaunch({
        //将微信头像和微信名称传递给【我的】页面
        url: '/pages/mine/mine?nickName='+userInfo.nickName+'&avatarUrl='+userInfo.avatarUrl,
      });

    }
  },

  /**
   * 第一次登录事件
   * 
   */
  Flogin() {
    this.getUserProfile();
    this.regsiterLogin();
  },

  /**
   * 获取用户信息
   * @param {*} e 
   */
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息，开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称，避免重复弹窗
    //console.log("getUserProfile",e)
    wx.getUserProfile({
      desc: '用于登陆平台', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
      success: (res) => {
        //console.log("getUserProfile成功",res)
        wx.reLaunch({
          //将微信头像和微信名称传递给【我的】页面
          url: '/pages/mine/mine?nickName='+res.userInfo.nickName+'&avatarUrl='+res.userInfo.avatarUrl,
        });
        wx.setStorageSync('userInfo', res.userInfo);
        console.log(res.userInfo);
        //console.log(this.data.status);
        // this.regsiterLogin();
      }
    })
  },

  /**
   * 注册登录
   */
  regsiterLogin(){
    //阻止函数二次启动
    if(this.data.regsiter_not2){
      return
    }
    this.setData({
      regsiter_not2:true
    })
    //取消各种弹窗动画
    this.chooseNothing()//提示窗口动画
    this.loginAni()//登录提示动画

    var that = this;
    const db = wx.cloud.database();
    //console.log('regsiterLogin启动');
    let userInfo = wx.getStorageSync('userInfo');
    //获取openid
    this.getOpenId().then(res => {
      console.log('检查返回的openid',res)
      var openid = res  // 异步获取openid
      //获取userInfo
      userInfo['openid'] = openid           // 用户openid
      userInfo['status'] = this.data.status // 用户身份
      userInfo.cId = []
      // console.log('检查openid',openid)
      db.collection('userInfo').where({
        _openid: openid // 填入当前用户 openid
      }).get().then(res =>{
        console.log('检查,res',res)
        if(res.data.length == 1){//已存在就更新
          var _id = res.data[0]._id
          db.collection('userInfo').doc(_id).update({
            data: userInfo
          })
        }else if(res.data.length == 0){//没有记录就上传
          db.collection('userInfo').add({
            data:userInfo,
            success(res){
              console.log('上传用户数据成功',res);
              wx.setStorageSync('userInfo', res.userInfo);
              // getApp().globalData.userInfo = userInfo
              wx.setStorageSync('userInfo', res.userInfo);
              that.isLogin()
            }
          })
        }else{//如果有多条数据，就全删了再加上去
          db.collection('UserInfo').where({//删除所有记录
            _openid : openid
          }).remove()
          db.collection('UserInfo').add({//上传新的
            data:userInfo,
            success(res){
              console.log('上传用户数据成功',res)
              // getApp().globalData.userInfo = userInfo
              wx.setStorageSync('userInfo', res.userInfo);
              that.isLogin()
            }
          })
        }
      })
    })
  },

    /**
   * 获取openid
   */
  getOpenId(){
    return new Promise((resolve , reject) =>{
      var openid = getApp().globalData.openid
      if(!openid){
        setTimeout(() => {
          
        }, 1000);
      }
      resolve(openid)
    });
  },

    /**
   * 检测登录状态，并提供userInfo
   */
  isLogin(){
    //console.log('检查login:', Object.keys( getApp().globalData.userInfo ))
    if( Object.keys( getApp().globalData.userInfo ).length != 0){
      console.log('已经登陆(找到userInfo)')
      this.setData({
        userInfo:getApp().globalData.userInfo,
        isLogin:true
      })
    }else{
      console.log('尚未登陆(未找到userInfo)')
    }
  },

  /**
   * 关闭窗口
   */
  chooseNothing(){
    var duration = 250
    var that = this

    this.animate(
      '.mask',  //选择器（可以指定多个）
      [         //关键帧 （需要指定原始帧形态）
        {opacity:'1'},          //原始帧
        {opacity:'0'},
      ],
      duration, //持续时间
      function(){//执行完后回调函数
        that.setData({
          showLogin:false
        })
      }
    )
  },

/**
   * 登陆窗浮现动画
   */
  loginAni(){
    //阻止函数二次启动
    if(this.data.ani_login_tip_not2){
      return
    }
    this.setData({
      ani_login_tip_not2:true
    })

    var that = this
    var duration = 250 //持续时间
    if(!this.data.showloginTip){//不存在就出现
      that.setData({
        showloginTip:true
      })

      this.animate(
        '.login_tip_view',  //选择器（可以指定多个）
        [         //关键帧 （需要指定原始帧形态）
          {bottom:'-180rpx'},          //原始帧
          {bottom:'0'},
        ],
        duration, //持续时间
        function(){//执行完后回调函数
          that.setData({
            ani_login_tip_not2:false
          })
        }
      )
    }else{//存在就消失
      this.animate(
        '.login_tip_view',  //选择器（可以指定多个）
        [         //关键帧 （需要指定原始帧形态）
          {bottom:'0'},          //原始帧
          {bottom:'-180rpx'},
        ],
        duration, //持续时间
        function(){//执行完后回调函数
          that.setData({
            showloginTip:false,
            ani_login_tip_not2:false
          })
        }
      )
    }
  },

  /**
   * 选中身份的动画
   */
  chooseStatusAni(name){
    //阻止函数二次启动
    if(this.data.ani_choose_status_not2){
      return
    }
    this.setData({
      ani_choose_status_not2:true
    })
    var that = this
    var duration_1 = 250 //持续时间
    var duration_2 = 500 //持续时间

    var classname_a // class名，另外一个对象
    var classname_b // class名，点击的这个对象
    if(name == 'teacher'){
      classname_a = '.start_tip_1_needTeacher'
      classname_b = '.start_tip_1_needStudent'
    }else{
      classname_a = '.start_tip_1_needStudent'
      classname_b = '.start_tip_1_needTeacher'
    }

    // 如果已经选择了另一个身份，而此时选择另一个身份：还原透明度
    if(this.data.start_choose_status){
      this.animate(
        classname_b,  //选择器（可以指定多个）
        [         //关键帧 （需要指定原始帧形态）
          {opacity:0.5,rotateY:0},          //原始帧
          {opacity:1,rotateY:360},
        ],
        duration_2, //持续时间
        function(){//执行完后回调函数
          that.setData({
            start_choose_status:true,
            ani_choose_status_not2:false
          })
        }
      )
    }else{
      // 旋转动画
      this.animate(
        classname_b,  //选择器（可以指定多个）
        [         //关键帧 （需要指定原始帧形态）
          {rotateY:0},          //原始帧
          {rotateY:360},
        ],
        duration_2, //持续时间
        function(){//执行完后回调函数
        }
      )
    }
    this.animate(
      classname_a,  //选择器（可以指定多个）
      [         //关键帧 （需要指定原始帧形态）
        {opacity:1},          //原始帧
        {opacity:0.5},
      ],
      duration_1, //持续时间
      function(){//执行完后回调函数
        that.setData({
          start_choose_status:true,
          ani_choose_status_not2:false
        })
      }
    )
  },

  /**
   * 选择老师身份
   */
  chooseTeacher(){
    this.setData({
      status:'student'
    })
    this.chooseStatusAni('teacher')//选中身份的动画
    if(!this.data.start_choose_status){
      this.loginAni()//登录提示动画
    }
    //this.startTipAni()//提示窗口动画
  },


  /**
   * 选择学生身份
   */
  chooseStudent(){
    this.setData({
      status:'teacher'
    })
    this.chooseStatusAni('student')//选中身份的动画
    if(!this.data.start_choose_status){
      this.loginAni()//登录提示动画
    }
    //this.startTipAni()//提示窗口动画
  },

})